/**
 * @description 保留当前页面，跳转到应用内的某个页面
 * @param {string} path 路径
 * @return void
 */
function $navTo(path: string) {
  uni.navigateTo({
    url: path,
    fail(e) {
      console.error('$navTo出错', e)
    },
  })
}

/**
 * @description 关闭当前页面，跳转到应用内的某个页面
 * @param {string} path 路径
 * @return void
 */
function $redBack(path: string) {
  uni.redirectTo({
    url: path,
    fail(e) {
      console.error('$redirectTo出错', e)
    },
  })
}

/**
 * @description 关闭当前页面，返回上一页面或多级页面
 * @param {number} level 返回的页面数，如果 delta 大于现有页面数，则返回到首页
 * @return void
 */
function $navBack(level: number = 1) {
  uni.navigateBack({
    delta: level
  })
}

/**
 * @description 关闭所有页面，打开到应用内的某个页面
 * @param {string} path 路径 路径后可以带参数 如果跳转的页面路径是 tabBar 页面则不能带参数
 * @return void
 */
function $reLaunch(path: string) {
  uni.reLaunch({
    url: path,
    fail(e) {
      console.error('$reLaunch出错', e)
    },
  })
}

/**
 * @description 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
 * @param {string} path 需要跳转的 tabBar 页面的路径（需在 pages.json 的 tabBar 字段定义的页面），路径后不能带参数
 * @return void
 */
function $switchTab(path: string) {
  uni.switchTab({
    url: path,
    fail(e) {
      console.error('$switchTab出错', e)
    },
  })
}

export { $navTo, $redBack, $navBack, $reLaunch, $switchTab }
